const express = require('express');
const path = require('path'); // 新增：用于路径处理
const app = express();

// 静态资源服务（必须放在最前）
app.use(express.static('public', { maxAge: '1d' }));

// 中间件
const bodyParser = require('body-parser');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));

const cors = require('cors');
app.use(cors());

// Token验证（排除登录接口、注册接口、list和article接口以及静态资源）
const { expressjwt: expressJwt } = require('express-jwt');
const { jwtSecretKey } = require('./config/jwtSecretKey');
app.use(expressJwt({
    secret: jwtSecretKey,
    algorithms: ['HS256']
}).unless({
    path: [
        /^\/api\/v1\/user\/login$/,  // 只有登录接口需要token
        /^\/api\/v1\/user\/register$/,  // 注册接口不需要token
        /^\/api\/v1\/list/,  // 排除list接口
        /^\/api\/v1\/article/,  // 排除article接口
        /\.(html|css|js|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf)$/i  // 静态资源不需要token
    ]
}));

// API路由
const userRouter = require('./router/user');
app.use('/api/v1/user', userRouter);

const listRouter = require('./router/list');
app.use('/api/v1/list', listRouter);

const articleRouter = require('./router/article');
app.use('/api/v1/article', articleRouter);

// 错误处理中间件（保持不变）
const joi = require('joi');
app.use((err, req, res, next) => {
    // joi表单的用户信息效验失败
    if (err instanceof joi.ValidationError) return res.send({ code: 1, msg: err.message });
    // token解析失败
    if (err.name === 'UnauthorizedError') return res.send({ code: 1, msg: '身份认证失败' });
    // 未知错误
    res.send({ code: 1, msg: err.message });
});


app.listen(3800, () => {
    console.log('服务器启动成功');
});
